﻿package com.tools
{
	import flash.events.EventDispatcher;
	import com.notifications.XmlEvent;
	import flash.net.*;
	import flash.events.*;
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// CLASSE UTILISÉE POUR LE CHARGEMENT D'UN XML
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	public class XmlLoader extends EventDispatcher
	{
		private var _loader : URLLoader;
		
		// CONSTRUCTEUR
		function XmlLoader( xmlUrl : String )
		{
			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			// MECANISME POUR LE CHARGEMENT D'UN  VIA UN LOADER
			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			_loader 			= new URLLoader( );
			_loader.dataFormat 	= URLLoaderDataFormat.TEXT;
			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			_loader.addEventListener ( 	Event.COMPLETE,
									  	loadingComplete );
			_loader.addEventListener ( 	HTTPStatusEvent.HTTP_STATUS,
									  	codeHTTP );
			_loader.addEventListener ( 	IOErrorEvent.IO_ERROR,
									  	loadingFailed );
			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			_loader.load( new URLRequest( xmlUrl ) );
			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		
		// méthode déclenchée lorsque le chargement du XML a fonctionné
		private function loadingComplete( pEvt : Event ) : void
		{
			// on génére un XML à partir des informations renvoyées
			var donneesXML:XML = new XML ( pEvt.target.data );
			// on diffuse un Event personnalisé qui pourra être écouté par les classes externes et qui transporte directement le XML en son sein
			dispatchEvent( new XmlEvent( XmlEvent.XML_LOADED, true, false, donneesXML ) );
		}
		
		// méthode déclenchée lorsqu'une requête réseau renvoie un code d'état HTTP
		private function codeHTTP( pEvt : HTTPStatusEvent ) : void
		{			
		}
		
		// méthode déclenchée lorsque le chargement du XML a échoué
		private function loadingFailed ( pEvt : IOErrorEvent ) : void
		{
			// on diffuse un Event personnalisé qui pourra être écouté par les classes externes
			dispatchEvent( new XmlEvent( XmlEvent.XML_FAILED, true, false ) );
		}
	}
}